Справочник по конфигурации кластера | Tdb
Справочник Справочник по конфигурации кластера

Справочник по конфигурации кластера

В этом разделе описаны опции конфигурации, представленные в Tarantool DB.

app.roles.slow_log

Секция app.roles.slow_log задает опции конфигурации журнала медленных запросов.

Пример

roles_cfg:
  app.roles.slow_log:
    enable: true
    threshold: 3
    namespaces:
      - app

app.roles.slow_log.enable

Включить запись в журнал медленных запросов. По умолчанию запись будет включена для запросов через модуль CRUD.

Тип: boolean

Значение по умолчанию: false

app.roles.slow_log.threshold

Максимальное время выполнения запроса в секундах. При превышении этого значения запрос считается медленным и записывается в журнал.

Тип: number

Значение по умолчанию: 0.5

app.roles.slow_log.namespaces

Задать функции, для которых будет включено логирование медленных запросов.

Тип: table

Значение по умолчанию: {}

app.roles.tracing

Секция app.roles.tracing задает опции конфигурации трассировки.

Пример

roles_cfg:
  app.roles.tracing:
    enabled: true
    global_sample_rate: 0
    sample_rates:
      get_token_api: 2
      debug_1: 1
    base_url: 'http://tracing:9411/api/v2/spans'
    api_method: 'POST'
    report_interval: 1
    spans_limit: 1000

app.roles.tracing.enabled

Включить трассировку.

Тип: boolean

Значение по умолчанию: false

app.roles.tracing.global_sample_rate

Глобальный коэффициент частоты трассировки – трассируется каждый N-й вызов функции. Примеры:

10 – трассируется каждый десятый запрос; 1 – трассируются все запросы; 0 – все запросы не трассируются.

Примечание

Рекомендуется установить такое значение параметра, чтобы трассировалось не более одного запроса в секунду. Например, при нагрузке 1000 RPS, если функция start_span() вызывается при каждом обращении к базе, установите значение global_sample_rate = 1000.

Тип: integer

Значение по умолчанию: 0

app.roles.tracing.sample_rates

Коэффициенты частоты трассировки для заданных сегментов (spans). Значение опции – это таблица из пар ключ-значение, где

  • ключ – название сегмента;

  • значение – частота трассировки для этого сегмента.

Примечание

Рекомендуется установить такое значение параметра, чтобы трассировалось не более одного запроса в секунду. Например, при нагрузке 1000 RPS у конкретной функции, в которой вызывается функция start_span() с названием get_user(), установите в tracing.sample_rates ключ-значение {get_user: 1000}.

Тип: table

Значение по умолчанию: „{}“

Пример:

  sample_rates:
    get_user: 1000
    get_token: 10000

app.roles.tracing.base_url

URL-адрес сервера трассировки, куда отправляются данные трассировки.

Тип: string

Значение по умолчанию: „http://127.0.0.1:9411/api/v2/spans“

app.roles.tracing.api_method

HTTP-метод, используемый для отправки данных трассировки на сервер. Возможные значения: POST, GET, PUT.

Тип: string

Значение по умолчанию: „POST“

app.roles.tracing.report_interval

Интервал в секундах между отправкой на сервер собранных данных о трассировке.

Тип: integer

Значение по умолчанию: 10

app.roles.tracing.spans_limit

Максимальное количество сегментов (span) трассировки, которые могут быть сохранены локально на экземпляре Tarantool перед отправкой во внешнюю систему хранения результатов трассировки.

Тип: integer

Значение по умолчанию: 1000

config.storage

Секция config.storage определяет опции конфигурации узла как части централизованного хранилища конфигураций. Узнать больше: Запуск кластера Tarantool DB как централизованного хранилища конфигураций.

Пример

roles_cfg:
  config.storage:
    status_check_interval: 3

config.storage.status_check_interval

Интервал в секундах между проверками состояния сервера в кластере.

Тип: number

Значение по умолчанию: 5

roles.cooler

Доступно с версии 3.0.0.

Секция задает опции конфигурации для технологической роли roles.cooler. Опции используются для настройки архивации устаревших данных из спейсов memtx в спейсы на vinyl. Узнать больше: Архивация данных по их времени жизни.

Пример

roles_cfg:
  roles.cooler:
    user_sessions:
      expirationd:
        primary_key:  # Явное указание сканирования по первичному ключу
          full_scan_time: 300
          tuples_per_iteration: 100

        last_updated_index:  # Дополнительный индекс
          full_scan_time: 1000
          tuples_per_iteration: 200
          start_key: user_sessions_last_updated_start_key
          iterator_type: 'LT'

Здесь:

  • user_sessions – название спейса memtx, для которого настраивается архивация;

    • primary – название первичного ключа, по которому идет сканирование спейса;

    • last_updated_index – название дополнительного индекса, по которому идет сканирование спейса;

      • full_scan_time – время обхода спейса в секундах;

      • tuples_per_iteration – количество кортежей, которое проверяется за одну итерацию;

      • start_key – ключ, с которого начинается проход по индексу;

      • iterator_type – тип итератора для обхода спейса.

Кроме того, в конфигурации можно задать уровень логирования модуля cooler с помощью опции log.modules.cooler:

log:
  modules:
    cooler: 'info'

Значение опции по умолчанию: info. Возможные значения:

  • info – информация по запуску и завершению задачи архивации;

  • verbose – информация по запуску и завершению задачи архивации, а также статистика по задаче и логирование всех новых параметров архивации. Уровень verboseиспользуется, чтобы оценить работу архивации через логи;

  • debug – информация по каждому архивируемому кортежу. Уровень debug используется для отладки работы модуля, включать данный уровень надолго не рекомендуется.

Задать опцию log.modules.cooler можно на любом уровне конфигурации: на все экземпляры кластера, группу, набор реплик или отдельный экземпляр. Полное описание опции log.modules приведено в документации Tarantool.

roles.cooler.<name>

Название спейса memtx, для которого настраивается архивация. Обязательный параметр.

Тип: string

roles.cooler.<name>.expirationd.<index_name>

Название индекса, по которому идет сканирование спейса. На каждый индекс спейса может быть задана только одна задача архивации. Настройка этой опции позволяет избежать лишнего прохода по первичному ключу, если используется другой, более подходящий индекс (например, по last_updated или archived_at):

  • если секция expirationd.\<index_name\> присутствует и содержит только вторичные индексы, идет сканирование только по этим индексам. Задача по первичному ключу при этом не запускается;

  • если секция expirationd.\<index_name\> пропущена, по умолчанию идет сканирование по первичному ключу;

  • если требуется запуск по первичному ключу вместе с другими индексами или настройка параметров, необходимо явно указать секцию expirationd.\<index_name\> с названием первичного ключа в конфигурации (см. пример выше).

Тип: string

roles.cooler.<name>.expirationd.<index_name>.force

Если задано значение false, модуль expirationd обрабатывает задачи для всех типов спейсов только на экземпляре, доступном для записи. Он не обрабатывает задачи для нелокальных персистентных спейсов на экземпляре только для чтения. Это означает, что expirationd не будет запускать обработку задачи на реплике для обычных спейсов. Если задано значение true, принудительно включается обработка такой задачи.

Тип: boolean

Значение по умолчанию: false

roles.cooler.<name>.expirationd.<index_name>.force_allow_functional_index

Если задано значение false, модуль expirationd возвращает ошибку при итерации по функциональному индексу, поскольку это может привести к сбою. Вы можете пропустить ошибку, установив значение true, например при реализации собственной функции iterate_with.

Тип: boolean

Значение по умолчанию: false

roles.cooler.<name>.expirationd.<index_name>.full_scan_delay

Время ожидания между полными сканированиями в секундах. В значении опции допустимо передавать номер FFI, например 1LL или 1ULL.

Тип: number

Значение по умолчанию: 1

roles.cooler.<name>.expirationd.<index_name>.full_scan_time

Время обхода спейса в секундах. Используется для расчета пауз между итерациями. Настройка регулирует скорость работы архивации данных. В значении опции допустимо передавать номер FFI, например 1LL или 1ULL.

Тип: number

Значение по умолчанию: 3600

roles.cooler.<name>.expirationd.<index_name>.iterate_with

Название функции, возвращающей итератор для обхода спейса. Если опция не указана, используется функция по умолчанию. Функция по умолчанию возвращает такой итератор, какой возвращается в index_object:pairs().

Тип: string

roles.cooler.<name>.expirationd.<index_name>.iteration_delay

Максимальное время ожидания между итерациями в секундах. В значении опции допустимо передавать номер FFI, например 1LL или 1ULL.

Тип: number

Значение по умолчанию: 1

roles.cooler.<name>.expirationd.<index_name>.iterator_type

Тип итератора для обхода спейса: строка или константа box.index, например, EQилиbox.index.EQ`.

Тип: string или number

Значение по умолчанию: box.index.ALL

roles.cooler.<name>.expirationd.<index_name>.on_full_scan_error

Имя функции, которая вызывается после завершения полного сканирования из-за ошибки.

Тип: string

roles.cooler.<name>.expirationd.<index_name>.on_full_scan_success

Имя функции, которая вызывается после успешного завершения полной итерации сканирования.

Тип: string

roles.cooler.<name>.expirationd.<index_name>.process_while

Имя функции, которая вызывается перед проверкой каждого кортежа. Если функция возвращает false, задача останавливается до следующего полного сканирования. По умолчанию используется функция, которая всегда возвращает true.

Тип: string

roles.cooler.<name>.expirationd.<index_name>.start_key

Значение индекса кортежа, с которого начнется итерация. Если тип итератора — EQ, выполняется итерация по кортежам с этим значением индекса. Если параметр пропущен или равен нулю, будут проверены все кортежи.

Значение опции должно соответствовать одному из условий ниже:

  • значение имеет тот же тип данных, что и поле (или поля) индекса;

  • если в start_key передана функция, она возвращает тот же тип данных, что и поле (или поля) индекса.

Если в start_key передана строка, она интерпретируется как имя функции.

Тип: string или table

roles.cooler.<name>.expirationd.<index_name>.tuples_per_iteration

Количество кортежей, которое проверяется за одну итерацию. В значении опции допустимо передавать номер FFI, например 1LL или 1ULL.

Тип: number

Значение по умолчанию: 1024

roles.cooler.<name>.expirationd.<index_name>.vinyl_assumed_space_len

Предполагаемый размер спейса vinyl в первой итерации. Размер спейса vinyl невозможно подсчитать точно, поскольку многие операции (например, upsert) выполняются при обращении к данным. Поэтому следует подсчитывать размер кортежей при первом запуске – это позволит определить приблизительный размер спейса. Значение опции vinyl_assumed_space_len – это приблизительный размер спейса для первого запуска. В значении опции допустимо передавать номер FFI, например 1LL или 1ULL.

Смотрите также: roles.cooler.<name>.expirationd.<index_name>.vinyl_assumed_space_len_factor.

Тип: number

Значение по умолчанию: 10⁷

roles.cooler.<name>.expirationd.<index_name>.vinyl_assumed_space_len_factor

Коэффициент для пересчёта размера спейса vinyl. Размер спейса vinyl невозможно подсчитать точно, поскольку многие операции (например, upsert) выполняются при обращении к данным. Поэтому следует подсчитывать размер кортежей при первом запуске – это позволит определить приблизительный размер спейса. vinyl_assumed_space_len – это приблизительное количество для первого запуска, а значение опции vinyl_assumed_space_len_factor – для следующего этапа. В значении опции допустимо передавать номер FFI, например 1LL или 1ULL.

Тип: number

Значение по умолчанию: 2

roles.crud-<router_or_storage>

Секция задает опции конфигурации для технологических ролей roles.crud-router и roles.crud-storage. Опции используются для настройки сбора метрик модуля CRUD.

Узнать больше про роли, связанные с crud: roles.crud-router, roles.crud-storage.

Пример

roles_cfg:
  roles.metrics-export:
    http:
    - endpoints:
      - format: prometheus
        path: /metrics
      listen: 8081

groups:
  routers:
    replication:
      failover: manual
    sharding:
      roles: [router]
    roles:
      - roles.crud-router
      - roles.metrics-export
      - roles.dictionary-router
    roles_cfg:
      roles.crud-router:
        stats: true
        stats_driver: metrics
        stats_quantiles: true
        stats_quantile_tolerated_error: 0.001
        stats_quantile_age_buckets_count: 5
        stats_quantile_max_age_time: 180

roles.crud-<router_or_storage>.stats

Включить сбор метрик модуля CRUD.

По умолчанию сбор метрик отключен, так как их работа снижает производительность:

  • на 3-10% – при использовании локального драйвера;

  • 5-15% – при использовании драйвера метрик. Этот драйвер используется по умолчанию;

  • до 20% – при использовании метрик, которые содержат квантили.

Тип: boolean

Значение по умолчанию: false

roles.crud-<router_or_storage>.stats_driver

Задать драйвер для хранения собранных метрик CRUD. Возможные значения:

  • local – использовать локальный драйвер;

  • metrics– использовать драйвер метрик.

Тип: string

Значение по умолчанию: „metrics“

Примечание

Включенный сбор метрик CRUD снижает производительность:

  • на 3-10% – при использовании локального драйвера;

  • 5-15% – при использовании драйвера метрик. Этот драйвер используется по умолчанию.

roles.crud-<router_or_storage>.stats_quantiles

Включить квантили метрик. Опция crud.stats_quantiles работает только в том случае, если в опции roles.crud-<router_or_storage>.stats_driver задан драйвер метрик (crud.stats_driver = 'metrics').

Примечание

Вычисление квантилей снижает производительность на величину до 10%.

Тип: boolean

Значение по умолчанию: false

roles.crud-<router_or_storage>.stats_quantile_age_buckets_count

Количество сегментов квантилей summary. Увеличение значения сглаживает скользящее окно, но потребляет дополнительную память и CPU. Опция crud.stats_quantile_age_buckets_count работает только в том случае, если в опции roles.crud-<router_or_storage>.stats_driver задан драйвер метрик (crud.stats_driver = 'metrics').

Тип: number

Значение по умолчанию: 2

roles.crud-<router_or_storage>.stats_quantile_max_age_time

Время жизни сегмента (bucket) в секундах. Опция crud.stats_quantile_max_age_time работает только в том случае, если в опции roles.crud-<router_or_storage>.stats_driver задан драйвер метрик (crud.stats_driver = 'metrics').

Меньший срок жизни сегмента приводит к меньшему временному окну для квантилей, при этом больше ресурсов CPU используется на ротацию сегментов. Если у вашего приложения низкая частота запросов, увеличьте значение, чтобы уменьшить количество пробелов -nan в значениях квантилей.

Узнать больше про опцию crud.stats_quantile_max_age_time можно в документации Tarantool в разделе Мониторинг.

Тип: number

Значение по умолчанию: 60

roles.crud-<router_or_storage>.stats_quantile_tolerated_error

Задать допустимую погрешность квантиля. Опция stats_quantile_tolerated_error работает только в том случае, если в опции roles.crud-<router_or_storage>.stats_driver задан драйвер метрик (crud.stats_driver = 'metrics').

Узнать больше про опцию crud.stats_quantile_tolerated_error можно в документации Tarantool в разделе Мониторинг.

Тип: number

Значение по умолчанию: 0.001

roles.dictionary-<router_or_storage>

Секция задает опции конфигурации для технологических ролей roles.dictionary-router и roles.dictionary-storage. Опции используются для настройки работы словарей.

Пример

roles_cfg:
  roles.dictionary-router:
    update_instances_list_period: 300
  roles.dictionary-storage:
    batch_size: 1000
    worker_sleep_in_second: 60
    update_instances_list_period: 300
    connect_timeout: 3

roles.dictionary-<router_or_storage>.batch_size

Размер пакета для обмена между узлами в байтах.

Тип: number

Значение по умолчанию: 400

roles.dictionary-<router_or_storage>.worker_sleep_in_second

Интервал в секундах между опросами соседнего экземпляра на наличие новых данных.

Тип: number

Значение по умолчанию: 3

roles.dictionary-<router_or_storage>.update_instances_list_period

Доступно с версии 2.0.0.

Частота обновления списка узлов в секундах. Модуль хранит список узлов и отслеживает нездоровые узлы. При обнаружении нездорового узла модуль прекращает попытки связаться с ним до следующего обновления списка. Опция также позволяет отслеживать появление новых узлов в кластере.

Тип: number

Значение по умолчанию: 60

roles.dictionary-<router_or_storage>.connect_timeout

Доступно с версии 2.0.0.

Время ожидания установки соединения в секундах.

Тип: number

Значение по умолчанию: Неограниченно

roles.expirationd

Секция roles.expirationd задает опции конфигурации устаревания данных.

roles.expirationd.<name>

Название задачи по устареванию данных. Обязательный параметр.

Тип: string

Примеры конфигурации

Без пользовательской логики

roles_cfg:
  roles.expirationd:
    task_name1:
      space: messages
      options:
        args:
          lifetime_in_seconds: 15
          time_create_field: dt

Здесь:

  • task_name1 – название задачи по устареванию данных;

    • space – название спейса, по которому идет поиск устаревших кортежей;

    • options.args – дополнительные опции конфигурации:

      • lifetime_in_seconds – время жизни кортежа в секундах;

      • time_create_field – название поля, по которому проверяется время жизни кортежа.

Узнать больше: Автоматическое удаление устаревших кортежей из спейса.

С пользовательской логикой

roles_cfg:
  roles.expirationd:
    messages_expiration:
      space: messages
      is_expired: messages_is_tuple_expired
      is_master_only: true
      options:
        tuples_per_iteration: 100
        iterate_with: messages_iterate_with
        process_expired_tuple: messages_process_expired_tuple
        args:
          seconds: 5

Здесь:

  • messages_expiration – название задачи по устареванию данных;

    • space – название спейса, по которому идет поиск устаревших кортежей;

    • is_expired – название функции, которая получает кортеж и проверяет его срок жизни;

    • is_master_only – экспирация запущена только на master-узлах;

    • options – дополнительные опции конфигурации:

      • tuples_per_iteration – количество кортежей, которое проверяется за одну итерацию;

      • iterate_with – название функции, которая получает и обрабатывает устаревшие кортежи;

      • process_expired_tuple – название функции, возвращающей итератор для обхода спейса;

      • args – аргументы, доступные в функциях message_iterate_with и message_process_expired_tuple, seconds – время жизни кортежа. А также для поиска устаревших данных по умолчанию. В этом случае используются следующие поля:

        • lifetime_in_seconds - время жизни кортежа в секундах;

        • time_create_field - поле «время создания» для оценки времени жизни.

Узнать больше: Проверка устаревших кортежей в спейсе с помощью пользовательских функций.

roles.expirationd.<name>.is_expired

Название функции, которая получает кортеж и проверяет его срок жизни. Функция возвращает true, если время жизни кортежа истекло. Обязательный параметр.

Тип: function

roles.expirationd.<name>.is_master_only

Запустить работу с устаревающими кортежами только на master-узлах.

Тип: boolean

Значение по умолчанию: false

roles.expirationd.<name>.space

Название спейса или идентификатор спейса, по которому идет поиск устаревших кортежей. Обязательный параметр.

Тип: string или number

roles.expirationd.<name>.options

Дополнительные опции конфигурации.

Тип: table

Значение по умолчанию: {}

roles.expirationd.<name>.options.args

Дополнительные аргументы конфигурации. Доступные аргументы:

Тип time_create_field

Текущее время

число

clock.time()

целое число

clock.time()

беззнаковое

clock.time()

datetime

datetime.now()

Тип: table

Значение по умолчанию: {}

roles.expirationd.<name>.options.iterate_with

Название функции, возвращающей итератор для обхода спейса. Если опция не указана, используется функция по умолчанию. Функция по умолчанию возвращает такой итератор, какой возвращается в index_object:pairs().

Тип: function

roles.expirationd.<name>.options.process_expired_tuple

Название функции, которая получает и обрабатывает устаревшие кортежи. Если опция не указана (или указан nil), устаревшие кортежи удаляются.

Тип: function

roles.expirationd.<name>.options.tuples_per_iteration

Количество кортежей, которое проверяется за одну итерацию. В значении опции допустимо передавать номер FFI, например 1LL или 1ULL.

Тип: number

Значение по умолчанию: 1024

roles.healthcheck

Доступно с версии 3.1.0.

Секция roles.healthcheck задает опции для технологической роли roles.healthcheck. Опции позволяют настраивать запуск встроенных проверок здоровья кластера и репликации, а также задавать пользовательские проверки работоспособности. Список доступных встроенных проверок приведен в секции roles.healthcheck.checks. Узнать больше: Проверка работоспособности кластера.

Для получения состояния здоровья узла используются HTTP GET-запросы на адрес обработчика запроса, заданный в конфигурации:

curl http://localhost:8081/healthcheck

Запрос возвращает один из следующих HTTP-статусов:

  • 200 с телом ответа {"status":"alive"} – все проверки завершены успешно;

  • 500 – не удалось успешно выполнить часть проверок, описание проблем приведено в поле details.

roles.healthcheck.checks

Включить или отключить запуск встроенных и пользовательских проверок. Пользовательские проверки по умолчанию включены, для исключения из списка запускаемых укажите их в опции checks.exclude. Поддерживаемые параметры:

  • include – список запускаемых проверок. Тип: table. Если установлено значение по умолчанию (all), запускаются все доступные проверки (основные, дополнительные и пользовательские);

  • exclude – список отключенных встроенных и пользовательских проверок. Тип: table. Если установлено значение по умолчанию ({}), запускаются все доступные проверки. При наличии одних и тех же проверок в опциях checks.include и checks.exclude приоритетное значение имеют проверки в опции checks.exclude.

Поддерживаемые встроенные проверки:

  • check_box_info_status – текущее состояние экземпляра. Проверка провалится, если box.info.status имеет статус, отличный от running;

  • check_snapshot_dir – наличие директории для снимков данных snapshot.dir с учетом значения process.work_dir. Проверка провалится, если директория snapshot.dir отсутствует или недоступна;

  • check_wal_dir – наличие директории журнала упреждающей записи wal.dir с учетом значения process.work_dir. Проверка провалится, если директория wal.dir отсутствует или недоступна;

  • replication.upstream_absentдополнительная проверка, наличие upstream-узла, с которого принимаются данные. Проверка провалится, если upstream-узел отсутствует и не выполняется репликация с upstream-узла на текущий экземпляр;

  • replication.state_badдополнительная проверка, репликационный статус текущего экземпляра (значение box.info.replication[{n}].upstream.status). Здоровым состоянием считаются только статусы follow или sync. Проверка провалится, если полученный статус отличается от follow или sync.

Дополнительные проверки репликации replication.upstream_absent.<имя_узла> и replication.state_bad.<имя_узла> запускаются по умолчанию, настроить это можно в секциях checks.include и checks.exclude.

Пример

Запустить все проверки кроме replication.upstream_absent и replication.state_bad:

roles_cfg:
  roles.healthcheck:
    checks:
      include: [all]
      exclude: ['replication.upstream_absent', 'replication.state_bad']
    http:
      - endpoints:
          - path: /healthcheck

Пример пользовательской проверки

Любая функция box.func с именем healthcheck.check_* выполняется, если она не исключена через checks.exclude. Если пользовательская проверка выдает ошибку или возвращает не булевое значение в качестве результата , проверка прекращает проход по оставшимся пользовательским проверкам. Такой подход с быстрым обнаружением ошибок позволяет увидеть нерабочие проверки, чтобы оперативно исправить их или отключить.

В примере ниже создана проверка healthcheck.check_space_size, отслеживающая размер заданного спейса. Если размер превышает пороговое значение, проверка возвращает ошибку:

-- migration or role code
box.schema.func.create('healthcheck.check_space_size', {
  if_not_exists = true,
  language = 'LUA',
  body = [[
    function()
      local limit = 10 * 1024 * 1024
      local used = box.space.my_space:bsize()
      if used > limit then
        return false, 'my_space is larger than 10MB'
      end
      return true
    end
  ]]
})

Чтобы отключить пользовательскую проверку, укажите ее в опции checks.exclude:

roles_cfg:
  roles.healthcheck:
    checks:
      exclude:
        - healthcheck.check_space_size
    http:
      - endpoints:
          - path: /healthcheck

roles.healthcheck.http

Параметры HTTP-сервера. При минимальной конфигурации модуля выполняются только встроенные проверки работоспособности Tarantool.

Поддерживаемые параметры:

  • server – название именованного HTTP-сервера из конфигурации технологической роли roles.httpd. Тип: string Если параметр не указан, используется сервер default;

    • endpoints– массив адресов с возможностью указания нескольких подключений. Тип: table. Возможные параметры:

      • path – адрес обработчика запроса (endpoint). Обязательный параметр. Тип: string;

      • format – формат, в котором предоставляется ответ. Тип: string. Опция поддерживает создание пользовательского формата ответа, подробности приведены в разделе Пример пользовательского формата ответа.

Примеры

Для корректной работы технологической роли roles.healthcheck нужно задать настройки HTTP-сервера в конфигурации роли roles.httpd. Для этого укажите обе роли в секции roles:

#...
groups:
  routers:
    #...
    roles: [ roles.httpd, roles.healthcheck ]

Затем определите конфигурацию сервера в секции roles_cfg.roles.httpd. Минимальная конфигурация при этом выглядит так:

roles_cfg:
  roles.healthcheck:
    http:
      - endpoints:
        - path: /healthcheck
groups:
  group-001:
    replicasets:
      router:
        instances:
          router:
            roles: [roles.httpd, roles.healthcheck]
            roles_cfg:
              roles.httpd:
                default:
                  listen: '127.0.0.1:8081'

Здесь:

  • roles.healthcheck.http.endpoints.path – адрес обработчика запроса на работоспособность (endpoint);

  • roles.httpd.default.listen – адрес и порт, на которых запущен HTTP-сервер. Технологическая роль roles.healthcheck использует общий HTTP-сервер, настроенный в конфигурации roles.httpd.

Использование именованного сервера:

roles_cfg:
  roles.httpd:
    default:
      listen: '127.0.0.1:8081'
    additional:
      listen: '127.0.0.1:8082'
  roles.healthcheck:
    http:
      - server: additional
        endpoints:
          - path: /healthcheck

Здесь:

  • roles.httpd.additional.listen – адрес и порт, на которых запущен HTTP-сервер. Технологическая роль roles.healthcheck использует общий именованный HTTP-сервер, настроенный в конфигурации roles.httpd;

  • roles.healthcheck.http.server – именованный HTTP-сервер из конфигурации roles.httpd;

  • roles.healthcheck.http.endpoints.path – адрес обработчика запроса на работоспособность (endpoint).

Пример пользовательского формата ответа

Для создания пользовательского формата ответа задайте функцию форматирования, которая возвращает ответ в формате {status=<number>, headers=?, body=?}. В примере ниже создана функция healthcheck.check_space_size, которая задает пользовательский формат ответа. Указанный формат возвращает один из следующих ответов:

  • HTTP-статус 200 – проверки завершены успешно;

  • HTTP-статус 560 – не удалось успешно выполнить часть проверок, описание проблем приведено в поле details.

box.schema.func.create('custom_healthcheck_format', {
  language = 'LUA',
  body = [[
    function(is_healthy, details)
      local json = require('json')
      if is_healthy then
        return { status = 200, body = json.encode({ok=true}) }
      end
      return {
        status = 560,
        headers = {['content-type'] = 'application/json'},
        body = json.encode({errors = details}),
      }
    end
  ]]
})

Чтобы использовать пользовательский формат ответа, укажите название созданной функции в опции roles.healthcheck.http.endpoints.format:

roles_cfg:
  roles.healthcheck:
    http:
      - endpoints:
          - path: /healthcheck
            format: custom_healthcheck_format

roles.healthcheck.ratelim_rps

Количество запросов в секунду с одного узла. Например, значение 1 означает один запрос в секунду, 0.2 – пять запросов в секунду. Значение null, заданное по умолчанию, отключает ограничение количества запросов. При превышении ограничения запрос возвращает ответ 429 с телом ответа {"status":"rate limit exceeded"}.

Примечание

Примечание

Рекомендуемое значение параметра составляет не более 5 запросов в секунду. Большее количество запросов может влиять на производительность экземпляра.

Тип: number

Значение по умолчанию: box.NULL

roles.healthcheck.set_alerts

Включить отображение неудачных попыток проверки работоспособности в виде оповещений (alerts). Название оповещения – это название функции box.func или checks. Описание оповещения содержит сообщение об ошибке из такой функции. Список оповещений можно просмотреть двумя способами:

  • в поле box.info.config.alerts (смотрите метод config.info() в документации платформы Tarantool;

  • в веб-интерфейсе TCM.

Тип: boolean

Значение по умолчанию: false

roles.tcf-<worker_or_coordinator>

Секция задает опции конфигурации для технологических ролей roles.tcf-worker и roles.tcf-coordinator. Опции определяют настройки кластеров, необходимые для взаимодействия с модулем Tarantool Clusters Federation (TCF). Полный список опций приведен в документации TCF. Задать конфигурацию кластера можно как через yaml-файл, так и в веб-интерфейсе Tarantool DB на вкладке TCF.

Узнать больше про технологические роли, связанные с TCF: roles.tcf-worker, roles.tcf-coordinator.

Нашли ответ на свой вопрос?
Обратная связь